package com.itfreer.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.UUID;
import java.util.regex.Pattern;

/**
 * 字符串辅助类
 */
public class StringUtils {

	/**
	 * 获取UUID
	 * @return 32UUID小写字符串
	 */
	public static String gainUUID(){
		String strUUID = UUID.randomUUID().toString();
		strUUID = strUUID.replaceAll("-", "").toLowerCase();
		return strUUID;
	}

	/**
	 * 判断一个字符串是否为null 或""或"  "
	 */
	public static boolean IsNullOrSpace(String value) {
		if (value == null || "".equals(value)) {
			return true;
		}

		if (value.trim().length() == 0) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 字符串是否有长度
	 */
	public static boolean HasLength(String value) {
		if (null == value || "".equals(value.trim())) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 对象转换成int型
	 */
	public static int objectToInt(Object obj) {
		int result = 0;
		if (null == obj || "".equals(obj)) {
			return 0;
		}
		try {
			result = Integer.parseInt(obj.toString());
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * 从字符串转换为bool值
	 */
	public static boolean getBool(String strBool) {
		if (IsNullOrSpace(strBool))
			return false;
		else {
			strBool = strBool.trim().toUpperCase();
			if (strBool.equals("1") || strBool.equals("TRUE")
					|| strBool.equals("是") || strBool.equals("YES"))
				return true;
			else
				return false;
		}
	}

	/**
	 * 判断一个字符串是否为null 或""或"  "
	 */
	public static boolean IsNullOrEmpty(String value) {
		if (value == null || "".equals(value)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 判断一个字符串是否为null 或""或"  "
	 */
	public static boolean IsNullOrEmpty(Object value) {
		if (value == null || "".equals(value.toString())) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 向左边添加指定的字符
	 */
	public static String PadLeft(String str, int padLength, char padLeftStr) {
		if (str.length() < padLength) {
			int padLengthIng = padLength - str.length();
			for (int i = 0; i < padLengthIng; i++) {
				str = padLeftStr + str;
			}
		}
		return str;
	}

	/**
	 * 向左边添加指定的字符
	 */
	public static String PadRight(String str, int padLength, char padLeftStr) {
		if (str.length() < padLength) {
			int padLengthIng = padLength - str.length();
			for (int i = 0; i < padLengthIng; i++) {
				str = str + padLeftStr;
			}
		}
		return str;
	}

	/**
	 * 处理url
	 * 
	 * url为null返回null，url为空串或以http://或https://开头，则加上http://，其他情况返回原参数。
	 * 
	 * @param url
	 * @return
	 */
	public static String handelUrl(String url) {
		if (url == null) {
			return null;
		}
		url = url.trim();
		if (url.equals("") || url.startsWith("http://")
				|| url.startsWith("https://")) {
			return url;
		} else {
			return "http://" + url.trim();
		}
	}

	/**
	 * 剪切文本。如果进行了剪切，则在文本后加上"..."
	 * 
	 * @param s
	 *            剪切对象。
	 * @param len
	 *            编码小于256的作为一个字符，大于256的作为两个字符。
	 * @return
	 */
	public static String textCut(String s, int len, String append) {
		if (s == null) {
			return null;
		}
		int slen = s.length();
		if (slen <= len) {
			return s;
		}
		// 最大计数（如果全是英文）
		int maxCount = len * 2;
		int count = 0;
		int i = 0;
		for (; count < maxCount && i < slen; i++) {
			if (s.codePointAt(i) < 256) {
				count++;
			} else {
				count += 2;
			}
		}
		if (i < slen) {
			if (count > maxCount) {
				i--;
			}
			if (!IsNullOrEmpty(append)) {
				if (s.codePointAt(i - 1) < 256) {
					i -= 2;
				} else {
					i--;
				}
				return s.substring(0, i) + append;
			} else {
				return s.substring(0, i);
			}
		} else {
			return s;
		}
	}

	/**
	 * 获取扩展名
	 * 
	 * @param str
	 * @return
	 */
	public static String getSuffix(String str) {
		int splitIndex = str.lastIndexOf(".");
		return str.substring(splitIndex + 1);
	}

	/**
	 * 将null转换为空字符�?
	 * @param str	
	 * @return String
	 */
	public static String isNullToEmpty(String str) {
		if (str == null)
			return "";
		return str;
	}

	/**
	 * 将流转成字符串
	 * @param is 输入流
	 * @return
	 * @throws Exception
	 */
	public static String convertStreamToString(InputStream is) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		StringBuilder sb = new StringBuilder();
		String line;
		while ((line = reader.readLine()) != null) {
			sb.append(line).append("\n");
		}
		return sb.toString();
	}

	/**
	 * 将文件转成字符串
	 * @param file 文件
	 * @return
	 * @throws Exception
	 */
	public static String getStringFromFile(File file) throws Exception {
		FileInputStream fin = new FileInputStream(file);
		String ret = convertStreamToString(fin);
		//Make sure you close all streams.
		fin.close();
		return ret;
	}
}